summaryrefslogtreecommitdiffstats
path: root/glucometerutils/drivers/sdcodefree.py
diff options
context:
space:
mode:
Diffstat (limited to 'glucometerutils/drivers/sdcodefree.py')
-rw-r--r--glucometerutils/drivers/sdcodefree.py33
1 files changed, 17 insertions, 16 deletions
diff --git a/glucometerutils/drivers/sdcodefree.py b/glucometerutils/drivers/sdcodefree.py
index 08a3afc..5d1d42c 100644
--- a/glucometerutils/drivers/sdcodefree.py
+++ b/glucometerutils/drivers/sdcodefree.py
@@ -21,6 +21,7 @@ import enum
import functools
import logging
import operator
+from typing import Generator, NoReturn
import construct
@@ -28,7 +29,7 @@ from glucometerutils import common, exceptions
from glucometerutils.support import driver_base, serial
-def xor_checksum(msg):
+def xor_checksum(msg: bytes) -> int:
return functools.reduce(operator.xor, msg)
@@ -87,12 +88,12 @@ class Device(serial.SerialDevice, driver_base.GlucometerDriver):
DEFAULT_CABLE_ID = "10c4:ea60" # Generic cable.
TIMEOUT = 300 # We need to wait for data from the device.
- def read_message(self):
+ def read_message(self) -> bytes:
pkt = _PACKET.parse_stream(self.serial_)
logging.debug("received packet: %r", pkt)
return pkt.message
- def wait_and_ready(self):
+ def wait_and_ready(self) -> int:
challenge = b"\0"
while challenge == b"\0":
@@ -126,37 +127,37 @@ class Device(serial.SerialDevice, driver_base.GlucometerDriver):
return first_message.count
- def send_message(self, message):
+ def send_message(self, message: bytes) -> None:
pkt = _PACKET.build({"message": message, "direction": Direction.Out})
logging.debug("sending packet: %s", binascii.hexlify(pkt))
self.serial_.write(pkt)
- def connect(self): # pylint: disable=no-self-use
+ def connect(self) -> None: # pylint: disable=no-self-use
print("Please connect and turn on the device.")
- def disconnect(self):
+ def disconnect(self) -> None:
self.send_message(_DISCONNECT_MESSAGE)
response = self.read_message()
if response != _DISCONNECTED_MESSAGE:
- raise exceptions.InvalidResponse(response=response)
+ raise exceptions.InvalidResponse(response=repr(response))
- def get_meter_info(self): # pylint: disable=no-self-use
+ def get_meter_info(self) -> common.MeterInfo: # pylint: disable=no-self-use
return common.MeterInfo("SD CodeFree glucometer")
- def get_version(self): # pylint: disable=no-self-use
+ def get_version(self) -> NoReturn: # pylint: disable=no-self-use
raise NotImplementedError
- def get_serial_number(self): # pylint: disable=no-self-use
+ def get_serial_number(self) -> NoReturn: # pylint: disable=no-self-use
raise NotImplementedError
- def get_glucose_unit(self): # pylint: disable=no-self-use
+ def get_glucose_unit(self) -> common.Unit: # pylint: disable=no-self-use
# Device does not provide information on glucose unit.
return common.Unit.MG_DL
- def get_datetime(self): # pylint: disable=no-self-use
+ def get_datetime(self) -> NoReturn: # pylint: disable=no-self-use
raise NotImplementedError
- def _set_device_datetime(self, date):
+ def _set_device_datetime(self, date: datetime.datetime) -> datetime.datetime:
setdatecmd = date.strftime("ADATE%Y%m%d%H%M").encode("ascii")
# Ignore the readings count.
@@ -165,17 +166,17 @@ class Device(serial.SerialDevice, driver_base.GlucometerDriver):
self.send_message(setdatecmd)
response = self.read_message()
if response != _DATE_SET_MESSAGE:
- raise exceptions.InvalidResponse(response=response)
+ raise exceptions.InvalidResponse(response=repr(response))
# The date we return should only include up to minute, unfortunately.
return datetime.datetime(
date.year, date.month, date.day, date.hour, date.minute
)
- def zero_log(self):
+ def zero_log(self) -> NoReturn:
raise NotImplementedError
- def get_readings(self):
+ def get_readings(self) -> Generator[common.AnyReading, None, None]:
count = self.wait_and_ready()
for _ in range(count):